package com.tom.architect.party5.day38.simple7;

import com.tom.architect.party4.day35.simple2.BaseSubscriber;
import com.tom.architect.party5.day38.simple7.base.BasePresenter;

/**
 * P层: 关联解耦M,V
 */
public class UserInfoPresenter
        extends BasePresenter<UserInfoContract.UserInfoView, UserInfoModel> // 传入泛型M: UserInfoModel
        implements UserInfoContract.UserInfoPresenter {

    // 写一对一的情况，Presenter 拥有一个Model。以后不要new model对象。直接getModel()获取。
    // 但是一定要指定 BasePresenter 的第二个泛型。
    // 一对多的情况，参考 View对应有多个Presenter的解决方案。


    @Override
    public void getUsers(String token) {
        // RxJava + OkHttp + Retrofit 或 网络引擎 或okhttp
        // 拿到数据
        // 显示正在加载中。
        getView().onLoading();
        getModel().getUsers(token).subscribe(new BaseSubscriber<UserInfo>() {
            @Override
            protected void onError(String errorCode, String errorMessage) {
                //  if (getView() != null) 每次判断，很麻烦. 通用代码统一处理。这个是 AOP思想。（AspectJ、动态代理）。因为是接口，所以可以操作
                getView().onError();
            }

            @Override
            public void onNext(UserInfo userInfo) {
                getView().onSucceed(userInfo);
            }
        });
    }

}
